#pragma once

#include <cstdint>
#include <cmath>

class Paint
{
protected:
    class InnerImpl;
public:
    Paint();
    virtual ~Paint();

    static void InitializeGdiplus();
    static void TerminateGdiplus();

    //static Paint* Handle();
    void Initialize(const double_t& width, const double_t& height, const uint32_t& ex);
    void Clear();
    void DrawPoint(const double_t& x, const double_t& y);
    void DrawPointConvexHull(const double_t& x, const double_t& y);
    void DrawLine(const double_t& x1, const double_t& y1, const double_t& x2, const double_t& y2);
    void SetPixel(const int& x, const int& y, const unsigned char r, const unsigned char g, const unsigned char b);
    void Save(const wchar_t* filename, const wchar_t* type = L"image/png", const int& quality = 80);
    void Release();
protected:
    //static Paint* handle;
    InnerImpl* inner = nullptr;
};

